#ifndef CAMARA_FIJA_H_
#define CAMARA_FIJA_H_

#include <GL/glut.h>
#include <assert.h>
#include "camara.h"

class CamFija : public Camara {
    private:
        float _elevacion;
        float _giro;
        
        float _x;
        float _y;
        float _z;

    public:

        /*
         * Construye una camara fija con dos dimensiones de libertad
         * (elevacion, giro)
         *
         * Inicialmente, elevacion = giro = 0 grados
         *
         * El plano del ecuador, esto es un plano que sirve de horizonte
         * es el plano xy  (z = 0)
         *
         * Siendo la parte "superior" z > 0
         *
         * Dicho vector normal al plano sirve como eje de rotacion 
         * (por definicion) de las rotaciones de "giro".
         *
         * El angulo giro hace rotar en circunferencias paralelas al
         * plano del ecuador. 
         *
         */

        CamFija();

        void ver() const;

        inline float elevacion() const { return _elevacion; }
        inline void elevacion(float angulo) { _elevacion = angulo; }

        inline float giro() const { return _giro; }
        inline void giro(float angulo) { _giro = angulo; }

        void avanzar(float despl);
        void retroceder(float despl) { avanzar(-despl); }

        void derecha(float despl);
        void izquierda(float despl) { derecha(-despl); }

        inline float x() const { return _x; }
        inline float y() const { return _y; }
        inline float z() const { return _z; }
        
        inline float& z() { return _z; }

};

#endif
